/*************************************************
  * 描述：日期事件选择器控件
  *
  * File：cxidatetimepicker.h
  * Author：dongyao@mozihealthcare.cn
  * Date：2025/10/14
  * Update：
  * ************************************************/

#ifndef CXIDATETIMEPICKER_H
#define CXIDATETIMEPICKER_H
#include <QDateTime>
#include <QLineEdit>
#include <controls/export.h>
#include <optional>
class CxiDateTimePickerPrivate;
class CXI_CONTROLS_EXPORT CxiDateTimePicker : public QLineEdit
{
	Q_OBJECT
	Q_PROPERTY(bool calendarPopup READ calendarPopup WRITE setCalendarPopup)
	Q_PROPERTY(QString displayFormat READ displayFormat WRITE setDisplayFormat)
public:
	// 日期时间显示部分
	enum class DateTimeSection
	{
		Year,  // 年
		Month, // 月
		Day,   // 日
		Hour,  // 时
		Minute,// 分
		Second,// 秒
		None   // 无
	};
	explicit CxiDateTimePicker(QWidget* parent = nullptr);
	~CxiDateTimePicker() override;

	/**
     * @brief 设置日期时间显示格式
     * @param format 格式字符串（如"yyyy-MM-dd"、"yyyy-MM-dd HH:mm:ss"）
     */
	void setDisplayFormat(const QString& format);
	QString displayFormat() const;
	// 启用/禁用日历弹窗
	void setCalendarPopup(bool enable);
	// 获取日历弹窗状态
	bool calendarPopup() const;

	// 设置当前日期时间
	void setDateTime(const std::optional<QDateTime>& dateTime);
	// 获取当前日期时间
	std::optional<QDateTime> dateTime() const;

protected:
	void mousePressEvent(QMouseEvent* event) override;
	void wheelEvent(QWheelEvent* event) override;
	void keyPressEvent(QKeyEvent* event) override;

private:
	Q_DECLARE_PRIVATE(CxiDateTimePicker)
	QScopedPointer<CxiDateTimePickerPrivate> d_ptr;
};


#endif//CXIDATETIMEPICKER_H
